<!DOCTYPE html>
<html>
	<head>
		<title>插件模式</title>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<script src="js/inc.js"></script>
	</head>
	<body>
		<fieldset>
			<legend>插件模式</legend>
			<ol>
				<li><h2 class="title_h2">概念</h2>
					　　插件模式是相对Web模式而言的，通常Web模式我们都是从框架入口文件开始访问运行我们的项目，
					<br>顺序是路由器路由到具体的控制器，然后加载执行控制器的方法。
					<br>　　插件模式就是可以把框架嵌入到任何现有的程序代码到中，然后按着Soter框架的各种特性写代码，
					<br>插件模式和正常模式唯一不同的就是插件模式下Soter的路由功能不再使用，其它特性完全保留。
					<br>　　插件模式下路由器不在起作用，那么加载执行控制器的方法由我们自己的业务逻辑决定。
					<br>　　Soter支持插件模式运行，只要我们在入口文件最上面定义一个宏SOTER_RUN_MODE_PLUGIN为true即可，
					<br>即：<code>define('SOTER_RUN_MODE_PLUGIN', TRUE);</code>
				</li>
				<li><h2 class="title_h2">手动加载</h2>
					插件模式下路由器不在起作用，我们可以通过Sr::factory()方法加载各种资源，比如控制器方法。
					<br>下面对它进行介绍：
					<h3 class="title_h3">1.首先我们看它的参数</h3>
					<pre class="brush:php">
						Sr::factory($className, $hmvcModuleName = null)	
					</pre>
					我们看到有两个参数：
					<br>$className：　　　　可以是完整的控制器类名，模型类名，类库类名
					<br>$hmvcModuleName：　 hmvc模块名称，是入口文件配置里面的数组的键名，插件模式下才会用到这个参数
					<br><b>该方法而且支持传递参数给构造方法,详细内容可以看下面2.4的介绍.</b>
					<h3 class="title_h3">2.加载示例</h3>
					2.1.比如加载控制器：application/classes/Controller/Welcome.php
					<pre class="brush:php">
						$welcome=Sr::factory('Controller_Welcome');
						//手动调用do_index方法，这里应该是按着我们具体的业务逻辑手动调用我们需要调用的方法。
						$welcome->do_index();		
					</pre>
					2.2.比如加载hmvc模块控制器：application/hmvc/demo/classes/Controller/Welcome.php
					<br>而且入口文件里面注册了hvmc模块demo，<code>Demo=>demo</code>。
					<pre class="brush:php">
						$welcome=Sr::factory('Controller_Welcome','Demo');
						$welcome->do_index();
					</pre>
					2.3.比如加载模型：application/classes/Model/User.php
					<pre class="brush:php">
						$userModel=Sr::factory('Model_User');
						//手动调用do_index方法，这里应该是按着我们具体的业务逻辑手动调用我们需要调用的方法。
						$userModel->do_something();		
					</pre>
					2.4.超级工厂方法Sr::factory($className, $hmvcModuleName = null)
					<br>第三个参数开始的参数Soter会按着参数顺序传递给你要实例化的类的构造方法.
					<br>比如:执行了Sr::factory('\Bean\User', null,669,'jack')
					<br>同时User类如下:
					<pre class="brush:php">
					&lt;?php
					namespace Bean;
					class User{
						private $id=0,$name='';
						public function __construct($id,$name){
							this.id=$id;
							this.name=$name;
						}
					}	
					</pre>
					那么669和jack就会作为$id和$name传递给User类的构造方法,如果要传递更多参数,
					<br>在调用Sr::factory('\Bean\User', null,669,'jack')的时候,后面依次写上即可.
				</li>
			</ol>

		</fieldset>
		<script src="js/inc.foot.js"></script>
	</body>
</html>
